package com.example.senior_homework

import MyApp
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import com.example.senior_homework.viewmodel.MyViewModel
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject


@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    //    lateinit @Inject var viewModel: MyViewModel,在mainacticity中是不允许的
    //    使用 ViewModelProvider 获取 ViewModel：
    //在 MainActivity 中，使用 ViewModelProvider 来获取 ViewModel 实例。


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 使用 ViewModelProvider 获取 ViewModel 实例
        var viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
        //  我这里只是测试使用，为了验证viewmodel结合hilt的唯一性和分析怎么与view层结合起来
        Log.i("current_ad","ViewModel address_0: ${System.identityHashCode(viewModel)}")
        Log.i("current_lc","lc_0 is ：$LocalViewModelStoreOwner.current")

        setContent {
            MyApp()
        }
    }
}

//虽然 ViewModel 也可以通过 ViewModelFactory 传入 Application 对象，但这并不是推荐的做法。
// AndroidViewModel 更加适合需要使用 Application 上下文的场景，它的设计就是为了方便地使用 Application 上下文。
// 因此，如果你需要访问 Application 上下文，建议使用 AndroidViewModel。
//一般还是按照设计的推荐做法来吧，虽然感觉两个差不多，第二个就比第一个多了个参数，但是单独分开肯定有道理，而且也可以简明设计目的
//推荐下，viewmodel不要context，androidmodel要

//其实看androidmodel源码，也就一个getApplication方法,他个演员